//  统一社会信用代码
export function UCCode(value) {
  //  假如不是18位，错误
  if (!value || value.length !== 18) {
    return '统一社会信用代码长度不合法'
  }
  let patrn = /^[0-9A-Z]+$/;
  //  18位校验及大写校验
  if ((patrn.test(value) == false)) {
    return '信用代码英文字母必须全部大写并不能包含特殊字符'
  }
  else {
    let Ancode; //  统一社会信用代码的每一个值
    let Ancodevalue;  //  统一社会信用代码每一个值的权重
    let total = 0;
    let weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]; //  加权因子
    let str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
    //  不用I、O、S、V、Z
    for (let i = 0; i < value.length - 1; i++) {
      Ancode = value.substring(i, i + 1);
      Ancodevalue = str.indexOf(Ancode);
      total = total + Ancodevalue * weightedfactors[i];
      //  权重与加权因子相乘之和
    }
    let logiccheckcode = 31 - total % 31;
    if (logiccheckcode == 31) {
      logiccheckcode = 0;
    }
    let Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
    let Array_Str = Str.split(',');
    logiccheckcode = Array_Str[logiccheckcode];
    let checkcode = value.substring(17, 18);
    if (logiccheckcode != checkcode) {
      return '请输入正确的统一社会信用代码'
    }
    return null
  }
}
